package cn.usts.edu.lesson07;

/**
 * 每次执行都无法达到理想的数字,是什么原因,
 * 是因为反应太快,导致不同线程对同一个list中的位置进行修改,导致了覆盖.
 *
 * 解决方案:
 *      添加锁块,等待线程结束.
 * */

import java.util.ArrayList;

public class UnSafeList {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<>();


        for (int i = 0; i < 10000; i++) {


                new Thread(()->{// 每次循环启动一个线程,并写线程名
                    synchronized (arrayList){
                        arrayList.add(Thread.currentThread().getName());//写入线程名
                    }

                }).start();
        }
        try {
            Thread.sleep(1000);//等待线程跑完,不加可能线程没跑完就打印出来了
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(arrayList.size());// 查看list的大小(list中有多少个线程名)
    }
}
